home *** CD-ROM | disk | FTP | other *** search
/ Galleria D'arte: Manet / Manet.iso / Dati / Main.dxr / 00059_Display Text.ls < prev    next >
Encoding:
Text File  |  2000-12-21  |  6.2 KB  |  192 lines

  1. property spriteNum, getPDLError, myDisplayType, mySprite, myMember, myWidthAdjust, myHeightAdjust, myOffStageLoc
  2.  
  3. on beginSprite me
  4.   Initialize(me)
  5. end
  6.  
  7. on endSprite me
  8.   mySprite.visible = 1
  9. end
  10.  
  11. on Initialize me
  12.   mySprite = sprite(me.spriteNum)
  13.   myMember = mySprite.member
  14.   memberType = myMember.type
  15.   case memberType of
  16.     #field, #text:
  17.     otherwise:
  18.       return ErrorAlert(me, #invalidMemberType, memberType)
  19.   end case
  20.   myDisplayType = symbol(myDisplayType)
  21.   if myMember.type = #field then
  22.     myWidthAdjust = (myMember.margin + myMember.border) * 2
  23.     myHeightAdjust = myMember.margin + (myMember.border * 2)
  24.   else
  25.     myWidthAdjust = 0
  26.     myHeightAdjust = 0
  27.   end if
  28.   myMember.text = EMPTY
  29.   if myDisplayType = #Tooltip then
  30.     myMember.boxType = #fixed
  31.     myOffStageLoc = point(999, 999)
  32.     mySprite.loc = myOffStageLoc
  33.   end if
  34. end
  35.  
  36. on BestRect me, theString
  37.   myMember.rect = rect(0, 0, 8000, 0)
  38.   myMember.text = theString
  39.   BestRect = myMember.rect
  40.   theLine = the number of lines in theString
  41.   theWidth = 0
  42.   checkedChars = 0
  43.   repeat while theLine
  44.     endOfLine = offset(RETURN, theString)
  45.     if not endOfLine then
  46.       endOfLine = the number of chars in theString + 1
  47.       myMember.text = myMember.text & RETURN
  48.     end if
  49.     checkedChars = checkedChars + endOfLine
  50.     endPoint = charPosToLoc(myMember, checkedChars)
  51.     lineWidth = endPoint[1]
  52.     if lineWidth > theWidth then
  53.       theWidth = lineWidth
  54.     end if
  55.     delete char 1 to endOfLine of theString
  56.     theLine = theLine - 1
  57.   end repeat
  58.   lastChar = myMember.char.count
  59.   lastCharLoc = charPosToLoc(myMember, lastChar)
  60.   theHeight = lastCharLoc[2]
  61.   BestRect[3] = theWidth + 1
  62.   BestRect[4] = theHeight + 1
  63.   return BestRect
  64. end
  65.  
  66. on GetTopLeft me, theLoc, theAlignment, memberRect
  67.   case theAlignment of
  68.     #bottomCenter:
  69.       return theLoc - [memberRect.width / 2, memberRect.height]
  70.     #bottomRight:
  71.       return theLoc - [memberRect.width, memberRect.height]
  72.     #bottomLeft:
  73.       return theLoc - [0, memberRect.height]
  74.     #center:
  75.       return theLoc - [memberRect.width / 2, memberRect.height / 2]
  76.     #topCenter:
  77.       return theLoc - [memberRect.width / 2, 0]
  78.     #topRight:
  79.       return theLoc - [memberRect.width, 0]
  80.     otherwise:
  81.       return theLoc
  82.   end case
  83. end
  84.  
  85. on DisplayText_Enroll me, enrollList
  86.   if ilk(enrollList) <> #list then
  87.     return me
  88.   end if
  89.   if not enrollList.count() then
  90.     enrollList.append(me)
  91.   else
  92.   end if
  93.   return enrollList
  94. end
  95.  
  96. on DisplayText_SetText me, theString, theLoc, theAlignment
  97.   global gTooltip
  98.   if gTooltip = 0 then
  99.     exit
  100.   end if
  101.   if not stringp(theString) then
  102.     ErrorAlert(me, #invalidString, theString)
  103.     theString = string(theString)
  104.   else
  105.     case ilk(theLoc) of
  106.       #void, #point:
  107.       otherwise:
  108.         ErrorAlert(me, #invalidPoint, theLoc)
  109.         theLoc = point(0, 0)
  110.     end case
  111.   end if
  112.   if (theString = EMPTY) and (myDisplayType = #Tooltip) then
  113.     mySprite.loc = myOffStageLoc
  114.   else
  115.     myMember.text = theString
  116.     if myDisplayType = #Tooltip then
  117.       memberRect = BestRect(me, theString)
  118.       myMember.rect = memberRect
  119.     else
  120.       memberRect = myMember.rect
  121.     end if
  122.     memberRect = memberRect + [0, 0, myWidthAdjust, myHeightAdjust]
  123.     if myDisplayType = #Tooltip then
  124.       if ilk(theLoc) <> #point then
  125.         theLoc = point(0, 0)
  126.       end if
  127.       theLoc = GetTopLeft(me, theLoc, theAlignment, memberRect)
  128.       stageWidth = (the activeWindow).rect.right - (the activeWindow).rect.left
  129.       stageHeight = (the activeWindow).rect.bottom - (the activeWindow).rect.top
  130.       maxH = stageWidth - memberRect.width
  131.       maxV = stageHeight - memberRect.height
  132.       theLoc[1] = max(0, min(theLoc[1], maxH))
  133.       theLoc[2] = max(0, min(theLoc[2], maxV))
  134.       theLoc = theLoc + myMember.regPoint
  135.       mySprite.loc = theLoc
  136.     else
  137.       lastChar = theString.char.count
  138.       textHeight = charPosToLoc(myMember, lastChar)[2]
  139.       if textHeight > mySprite.height then
  140.         myMember.boxType = #scroll
  141.       else
  142.         myMember.boxType = #fixed
  143.       end if
  144.     end if
  145.   end if
  146. end
  147.  
  148. on DisplayText_GetReference me
  149.   return me
  150. end
  151.  
  152. on ErrorAlert me, theError, data
  153.   case theError of
  154.     #getPDLError:
  155.       alert("Error: This behavior works only with Field and Text members." & RETURN & RETURN & "Hit OK and then delete this behavior from the sprite." & RETURN & RETURN & "For more information on deleting Behaviors, see the Help system.")
  156.       if the optionDown then
  157.         return [#getPDLError: [#comment: "ERROR:   Wrong member type.   Click 'Cancel'." & RETURN & "             Use only with Field and Text members.", #format: #string, #range: [EMPTY], #default: EMPTY]]
  158.       end if
  159.     otherwise:
  160.       case theError of
  161.         #invalidMemberType:
  162.           behaviorName = string(me)
  163.           delete word 1 of behaviorName
  164.           delete char -30001 of behaviorName
  165.           delete char -30001 of behaviorName
  166.           alert("BEHAVIOR ERROR: Frame " & the frame & ", Sprite " & me.spriteNum & RETURN & RETURN & "Behavior " & behaviorName & " only works with Field and Text members." & RETURN & RETURN & "Current member type = #" & data)
  167.           halt()
  168.         #invalidString:
  169.           if the runMode = "Author" then
  170.             alert("BEHAVIOR ERROR: Frame " & the frame & ", Sprite " & me.spriteNum & RETURN & "Behavior " & behaviorName & RETURN & RETURN & "The DisplayText_SetText handler could not treat the following as a string:" & RETURN & RETURN & data)
  171.           end if
  172.         #invalidPoint:
  173.           if the runMode = "Author" then
  174.             alert("BEHAVIOR ERROR: Frame " & the frame & ", Sprite " & me.spriteNum & RETURN & "Behavior " & behaviorName & RETURN & RETURN & "The DisplayText_SetText handler could not treat the following as a point:" & RETURN & RETURN & data)
  175.           end if
  176.       end case
  177.   end case
  178. end
  179.  
  180. on getPropertyDescriptionList me
  181.   if not (the currentSpriteNum) then
  182.     exit
  183.   end if
  184.   theMember = sprite(the currentSpriteNum).member
  185.   case theMember.type of
  186.     #field, #text:
  187.     otherwise:
  188.       return ErrorAlert(me, #getPDLError)
  189.   end case
  190.   return [#myDisplayType: [#comment: "Display Text sprite behaves as a:", #format: #symbol, #range: ["status bar (fixed size and position)", "tooltip (dynamic size and position)"], #default: "in a fixed position (status bar)"]]
  191. end
  192.